//// Project name:JavaRedis
//// Creator:muhong
//// Date time:2022/11/12,1:34 下午
//// Name:JedisServer
//
//package org.gmh.server;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import java.io.IOException;
//import java.net.InetSocketAddress;
//import java.net.ServerSocket;
//import java.nio.channels.SelectionKey;
//import java.nio.channels.Selector;
//import java.nio.channels.ServerSocketChannel;
//import java.nio.channels.SocketChannel;
//import java.util.Iterator;
//import java.util.Set;
//
//public class JRedisServer {
//
//    private final Logger logger = LoggerFactory.getLogger(this.getClass());
//
//    private static int SERVER_PORT = 9090;
//
//    ServerSocketChannel serverSocketChannel;
//    Selector selector;
//    //
//    WorkEventLoopGroup eventLoopGroup = new WorkEventLoopGroup();
//
//    private void startServer() {
//        logger.info("开始启动并监听服务器......");
//        try {
//            serverSocketChannel = ServerSocketChannel.open();
//            ServerSocket serverSocket = serverSocketChannel.socket();
//            InetSocketAddress address = new InetSocketAddress(SERVER_PORT);
//            serverSocket.bind(address);
//            serverSocketChannel.configureBlocking(false);
//            selector = Selector.open();
//            serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error(e.getMessage());
//            return;
//        }
//        //
//        eventLoopGroup.start();
//        // 进入监听事件
//        while (true) {
//            try {
//                selector.select(); // 轮询事件
//            } catch (IOException e) {
//                logger.error(e.getMessage());
//                e.printStackTrace();
//                return;
//            }
//            Set<SelectionKey> readyKeys = selector.selectedKeys();
//            if (readyKeys.isEmpty()) {
//                continue;
//            }
//
//            Iterator<SelectionKey> iterator = readyKeys.iterator();
//            while (iterator.hasNext()) {
//                SelectionKey key = iterator.next();
//                iterator.remove();
//                try {
//                    // 是server socket接收客户的连接请求
//                    if (key.isAcceptable()) {
//                        ServerSocketChannel server = (ServerSocketChannel) key.channel();
//                        SocketChannel client = server.accept();
//                        logger.info("接收到连接请求，来自客户端：" + client);
//                        //注册
//                        eventLoopGroup.register(client);
//                    }
//                } catch (IOException e) {
//                    key.cancel();
//                    try {
//                        key.channel().close();
//                    } catch (IOException ex) {
//                        ex.printStackTrace();
//                    }
//                    //
//                    e.printStackTrace();
//                    logger.error(e.getMessage(), "处理事件失败！");
//                }
//            }
//        }
//    }
//
//    public static void main(String[] args) {
//        JRedisServer jRedisServer = new JRedisServer();
//        jRedisServer.startServer();
//    }
//}
